#!/bin/bash

# directory_exists() 检查指定目录是否存在
# 入参: $1 - 目录路径
# 出参: 如果目录存在返回0，否则返回1
directory_exists() {
    if [ -d "$1" ]; then
        return 0
    else
        return 1
    fi
}

# clone_repository() 克隆Git仓库并切换到指定分支
# 入参: $1 - Git仓库地址, $2 - 本地目录路径, $3 - 分支名称
# 出参: 无
clone_repository() {
    git clone "$1" "$2"
    if [ $? -ne 0 ]; then
        echo "克隆仓库失败"
        exit 1
    fi

    cd "$2" || { echo "进入目录失败"; exit 1; }
    git checkout "$3"
    if [ $? -ne 0 ]; then
        echo "切换分支失败"
        exit 1
    fi
    git pull origin "$3"
    if [ $? -ne 0 ]; then
        echo "拉取最新代码失败"
        exit 1
    fi
}

# update_repository() 更新现有Git仓库的指定分支
# 入参: $1 - 本地目录路径, $2 - 分支名称
# 出参: 无
update_repository() {
    cd "$1" || { echo "进入目录失败"; exit 1; }
    git fetch origin
    if [ $? -ne 0 ]; then
        echo "获取最新代码失败"
        exit 1
    fi
    git checkout "$2"
    if [ $? -ne 0 ]; then
        echo "切换分支失败"
        exit 1
    fi
    git pull origin "$2"
    if [ $? -ne 0 ]; then
        echo "拉取最新代码失败"
        exit 1
    fi
}

# 主逻辑
# 检查脚本参数数量是否正确
if [ $# -ne 3 ]; then
    echo "使用方法: $0 <git仓库地址> <分支名称> <本地目录>"
    exit 1
fi

GIT_REPO_URL=$1
GIT_BRANCH=$2
DIRECTORY=$3

# 检查指定目录是否存在
if directory_exists "$DIRECTORY"; then
    echo "目录已存在。正在更新仓库..."
    update_repository "$DIRECTORY" "$GIT_BRANCH"
else
    echo "目录不存在。正在克隆仓库..."
    clone_repository "$GIT_REPO_URL" "$DIRECTORY" "$GIT_BRANCH"
fi

echo "仓库已更新并切换到分支 '$GIT_BRANCH'。"
